import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE

# 1. 生成随机隐向量（1000个样本，256维）和随机标签（0-9）
np.random.seed(42)
n_samples = 1000
n_features = 256
hidden_vectors = np.random.randn(n_samples, n_features)  # 随机隐向量
print(hidden_vectors.shape)
labels = np.random.randint(0, 1, n_samples)            # 随机标签（用于着色）

# 2. 直接运行 t-SNE（无需标准化，因为数据已经是随机正态分布）
tsne = TSNE(
    n_components=2,      # 降维到2D
    perplexity=30,       # 平衡局部/全局结构
    learning_rate=200,
    n_iter=1000,
    random_state=42
)
vectors_2d = tsne.fit_transform(hidden_vectors)

# 3. 可视化
plt.figure(figsize=(8, 6))
plt.scatter(
    vectors_2d[:, 0],
    vectors_2d[:, 1],
    c=labels,           # 用标签着色
    cmap='tab10',       # 10种颜色
    alpha=0.6,
    s=10               # 点大小
)
plt.colorbar(label='Class')
plt.title("t-SNE Visualization of Random Hidden Vectors")
plt.xlabel("t-SNE Dimension 1")
plt.ylabel("t-SNE Dimension 2")
plt.show()